/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ipartek.formacion.gestformwww.modelo;

import com.ipartek.formacion.gestformwww.modelo.beans.Correo;
import com.ipartek.formacion.gestformwww.modelo.beans.CorreoCalendario;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import com.ipartek.formacion.gestformwww.modelo.clases.DAOFactory;
import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.servlet.ServletContext;

/**
 *
 * @author Curso
 */
public class ModeloCorreo {

    private DAOFactory factoria = null;

    public ModeloCorreo() {
        factoria = DAOFactory.getDAOFactory(DAOFactory.SQLSERVER);
    }

    public void enviarCorreo(ArrayList<Correo> correos, ServletContext sc) throws GestorFormacionExcepcion {
        for (Correo correo : correos) {
            envio(correo, sc);
        }
        factoria.getICorreoDAO().guardarCorreo(correos);
    }
    public ArrayList<Correo> listarCorreoCurso(int idCandidato, int idCurso)throws GestorFormacionExcepcion {
        return factoria.getICorreoDAO().listarCorreoCurso(idCandidato, idCurso);
    }
    
    public ArrayList<Correo> listarCorreoCandidatoConvocatoria(int idCan, int idCon)throws GestorFormacionExcepcion {
        return factoria.getICorreoDAO().listarCorreoCandidatoConvocatoria(idCan, idCon);
    }

    private static void envio(Correo correo, ServletContext sc) {
        Properties p = null;
        String origen = "practicasipartek@gmail.com";
        String html = "";
        File file = new File(sc.getRealPath("/templates/plantillaMail.html"));
        FileReader fis = null;
         File fileFirma = new File(sc.getRealPath("/templates/firmaIpartek.html"));
        FileReader fisFirma = null;
        try {
            fis = new FileReader(file);
            fisFirma = new FileReader(fileFirma);
            BufferedReader br = new BufferedReader(fis);
            BufferedReader brFirma = new BufferedReader(fisFirma);
            String aux = "";
            String auxFirma = "";
            while ((aux = br.readLine()) != null) {
                html += aux;
            }
            while ((auxFirma = brFirma.readLine()) != null) {
                html += auxFirma;
            }
        } catch (Exception ex) {
            html = "[MENSAJE]";
        }

        try {
            p = new Properties();
            p.setProperty("mail.transport.protocol", "smtp");
            p.setProperty("mail.smtp.host", "smtp.gmail.com");
            p.setProperty("mail.smtp.starttls.enable", "true");
            p.setProperty("mail.smtp.port", "465");//antes 465
            p.setProperty("mail.smtp.user", origen);
            p.setProperty("mail.smtp.auth", "true");
            p.setProperty("mail.smtp.socketFactory.port", "465");
            p.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            p.setProperty("mail.smtp.socketFactory.fallback", "true");
            Session session = Session.getDefaultInstance(p);
            session.setDebug(true); //PONER A FALSE
            MimeMessage mensaje = new MimeMessage(session);
            mensaje.setFrom(new InternetAddress(origen));
            mensaje.addRecipient(Message.RecipientType.TO, new InternetAddress(correo.getDestinatario()));
            mensaje.setSubject(correo.getAsunto());
            html=html.replace("[MENSAJE]", correo.getCuerpo());
            mensaje.setText(html, "ISO-8859-1", "html"); //CAMBIAR HTML
            Transport t = session.getTransport("smtp");
            t.connect(origen, "karmelesecompragatos");
            t.sendMessage(mensaje, mensaje.getAllRecipients());
            t.close();
            correo.setEnviado(true);
        } catch (MessagingException ex) {
            correo.setEnviado(false);
        }
    }

    public void envioPedido(Correo correo, ServletContext sc) throws GestorFormacionExcepcion {
        Properties p = null;
        String origen = "practicasipartek@gmail.com";
        String html = "";
        File file = new File(sc.getRealPath("/templates/plantillaMailPedido.html"));
        FileReader fis = null;
        File fileFirma = new File(sc.getRealPath("/templates/firmaIpartek.html"));
        FileReader fisFirma = null;
        try {
            fis = new FileReader(file);
            fisFirma = new FileReader(fileFirma);
            BufferedReader br = new BufferedReader(fis);
            BufferedReader brFirma = new BufferedReader(fisFirma);
            String aux = "";
            String auxFirma = "";
            while ((aux = br.readLine()) != null) {
                html += aux;
            }
            while ((auxFirma = brFirma.readLine()) != null) {
                html += auxFirma;
            }
        } catch (Exception ex) {
            html = "[MENSAJE]";
        }

        try {
            p = new Properties();
            p.setProperty("mail.transport.protocol", "smtp");
            p.setProperty("mail.smtp.host", "smtp.gmail.com");
            p.setProperty("mail.smtp.starttls.enable", "true");
            p.setProperty("mail.smtp.port", "465");//antes 465
            p.setProperty("mail.smtp.user", origen);
            p.setProperty("mail.smtp.auth", "true");
            p.setProperty("mail.smtp.socketFactory.port", "465");
            p.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            p.setProperty("mail.smtp.socketFactory.fallback", "true");
            Session session = Session.getDefaultInstance(p);
            session.setDebug(true); //PONER A FALSE
            MimeMessage mensaje = new MimeMessage(session);
            mensaje.setFrom(new InternetAddress(origen));
            //correo.setDestinatario("practicasipartek@gmail.com");
            mensaje.addRecipient(Message.RecipientType.TO, new InternetAddress(correo.getDestinatario()));
            mensaje.setSubject(correo.getAsunto());
            html=html.replace("[TABLA]", correo.getTabla());
            html=html.replace("[MENSAJE]", correo.getCuerpo());
            mensaje.setText(html, "ISO-8859-1", "html"); //CAMBIAR HTML
            Transport t = session.getTransport("smtp");
            t.connect(origen, "karmelesecompragatos");
            t.sendMessage(mensaje, mensaje.getAllRecipients());
            t.close();
            correo.setEnviado(true);
        } catch (MessagingException ex) {
            correo.setEnviado(false);
        }
    }
    /**
     * Metodo para enviar el correo con el calendario del curso
     * @param correocalendario, objeto del tipo CorreoCalendario con los datos del mismo
     * @param sc, objeto del tipo ServletContext
     * @throws GestorFormacionExcepcion
     */
    public void envioCalendario(Correo correo, ServletContext sc) throws GestorFormacionExcepcion {
        Properties p = null;
        String origen = "practicasipartek@gmail.com";
        String html = "";
        File file = new File(sc.getRealPath("/templates/plantillaCalendario.html"));
        FileReader fis = null;
        File fileFirma = new File(sc.getRealPath("/templates/firmaIpartek.html"));
        FileReader fisFirma = null;
        try {
            fis = new FileReader(file);
            fisFirma = new FileReader(fileFirma);
            BufferedReader br = new BufferedReader(fis);
            BufferedReader brFirma = new BufferedReader(fisFirma);
            String aux = "";
            String auxFirma = "";
            while ((aux = br.readLine()) != null) {
                html += aux;
            }
            while ((auxFirma = brFirma.readLine()) != null) {
                html += auxFirma;
            }
        } catch (Exception ex) {
            html = "[MENSAJE]";
        }

        try {
            p = new Properties();
            p.setProperty("mail.transport.protocol", "smtp");
            p.setProperty("mail.smtp.host", "smtp.gmail.com");
            p.setProperty("mail.smtp.starttls.enable", "true");
            p.setProperty("mail.smtp.port", "465");//antes 465
            p.setProperty("mail.smtp.user", origen);
            p.setProperty("mail.smtp.auth", "true");
            p.setProperty("mail.smtp.socketFactory.port", "465");
            p.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            p.setProperty("mail.smtp.socketFactory.fallback", "true");
            Session session = Session.getDefaultInstance(p);
            session.setDebug(true); //PONER A FALSE
            MimeMessage mensaje = new MimeMessage(session);
            mensaje.setFrom(new InternetAddress(origen));
            //correo.setDestinatario("practicasipartek@gmail.com");
            mensaje.addRecipient(Message.RecipientType.TO, new InternetAddress(correo.getDestinatario()));
            mensaje.setSubject(correo.getAsunto());
            //ir haciendo replace para todos los meses del curso
            html=html.replace("[TABLA]", correo.getTabla());
            html=html.replace("[MENSAJE]", correo.getCuerpo());
            mensaje.setText(html, "ISO-8859-1", "html"); //CAMBIAR HTML
            Transport t = session.getTransport("smtp");
            t.connect(origen, "karmelesecompragatos");
            t.sendMessage(mensaje, mensaje.getAllRecipients());
            t.close();
            correo.setEnviado(true);
        } catch (MessagingException ex) {
            correo.setEnviado(false);
        }
    }
}
